<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数据类型</title>
</head>
<body>
    <script>
      // js 数据类型：有两中种

      // 第一种：基本数据类型 存放在栈中
      //  String  字符串
      //  Number   数字
      //  Boolean  布尔值
      //  null 空
      //  undefined  未定义
      //  symbol （es6）  唯一值
      //  bigInt  大数字
      
      //  1. String: 字符串类型特点
      //  1. 字符串的单引号和双引号作用效果一样
      //  2. 字符串有 length属性，可以取得字符串的长度
      //  3. 字符串的值是不可变的，所以很多的字符串的api不会改变原字符串值
    
      //  2. Number类型包含整数和浮点数
      //   浮点数数值必须包含一个小数点，且小数点后面至少有一个数字
      //   在js中浮点数的精度是17位，计算是二进制的计算数据，所以得到的不是整数
      //  1. isNan:判断是否是一个非数字类型，传入的非数字类型，返回true，否则返回false
      //  2. typeof
      //  3. NaN:非数字类型，属于数值型基本数据类型

      //  3. Boolean:布尔类型
      //  1. 该类型只有两个值： true，false
      //

      //  4. null:空对象指针类型
      //  如果定义了一个对象，初始化可以为null，因为null的基本类型是null，在if语句中默认转化为false，在和数值计算默认为0
      //  

      //  5. undefined:申明了变量但没有初始化，默认为undefined，在if语句中默认转化为false

      //  6.symbol:es6新增的一个基本数据类型，表示唯一性
      //  1. symbol属性类型不支持for...in和object.keys()


      // 第二种：引用（对象）数据类型 (存放在堆内存中的数据)
      // object 基类 （在js中除了基本数据类型以外的都是对象，数据是对象，函数是对象，正则表达式也是对象）
      //  {} plainObject
      //  Array
      //  Function
      //  Date
      //  RegExp

    //   console.dir(Array);

      // 常见的数据类型判断
      // 1.typeof
      // 2.instanceof
      // 3.constructor
      // 4.Object.prototype.toString.call()

      //bigInt 大数字
      //console.log(Number.MAX_SAFE_INTEGER); 最大安全数字
      //console.log(Number.MIN_SAFE_INTEGER); 最小安全数字

      // symbol
    //   console.log("AA"=="AA");
    //   console.log(Symbol("AA")==Symbol("AA")); false
    //   console.log(typeof Symbol('AA'));
    //   console.dir(Boolean);
    //   console.dir(Symbol);
    //   console.dir(Array);


    // Symbol.for ==>for of底层处理方法
    // Symbol.iterator ==>迭代器
    //  let obj={
    //         name:"haha",
    //         [Symbol("age")]:18,
    //         [Symbol("age")]:90,
    //         age:19,
    //         age:80,
    //         [Symbol("age")]:18,
    //         [Symbol("age")]:19,
    //     }
    //     console.log(obj);


    // for in 和 for of 的区别
    // 遍历对象
    //  let obj ={
    //     name:"haha",
    //     age:18
    // }
    // for(let key in obj){
    //     console.log("for in",key,obj[key]);
    // }
    // for(let key of obj){
    //     console.log("for of",key,obj[key]);
    // }
    //遍历数组
    // let arr=[1,2,3,3];
    // for(let index in arr){
    //     console.log("for in",index,arr[index]);
    // }
    // for(let item of arr){
    //     console.log("for of",item);
    // }


    </script>
    
</body>
</html>